/*
 * Copyright 2009 Cedric Priscal
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 * http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License. 
 */

package android_serialport_api.sample;

import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.Preference.OnPreferenceChangeListener;
import android.preference.PreferenceActivity;
import android.util.Log;
import android.widget.Toast;

import com.clouddot.baipai.R;

import android_serialport_api.SerialPortFinder;

public class SerialPortPreferences extends PreferenceActivity {

	private application mApplication;
	private SerialPortFinder mSerialPortFinder;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		try {
			mApplication = (application) getApplication();
			mSerialPortFinder = mApplication.mSerialPortFinder;

			addPreferencesFromResource(R.xml.serial_port_preferences);

			// Devices
			final ListPreference devices = (ListPreference)findPreference("DEVICE");
			String[] entries = mSerialPortFinder.getAllDevices();
			String[] entryValues = mSerialPortFinder.getAllDevicesPath();
			devices.setEntries(entries);
			devices.setEntryValues(entryValues);
			devices.setSummary(devices.getValue());
			devices.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
				public boolean onPreferenceChange(Preference preference, Object newValue) {
					preference.setSummary((String)newValue);

					((application) getApplication()).setDevice((String)newValue);

					SharedPreferences sp = getSharedPreferences("android_serialport_api.sample_preferences", MODE_PRIVATE);
					String path = sp.getString("DEVICE", "");
					int baudrate = Integer.decode(sp.getString("BAUDRATE", "-1"));
					Log.e("serialPortPreferences", "path:" + path + ", baudrate:" + baudrate + ", pathNewValue:" + newValue);

					SharedPreferences spf = getSharedPreferences("sp", 0);
					spf.edit().putString("DEVICE", (String)newValue).commit();

					return true;
				}
			});

			// Baud rates
			final ListPreference baudrates = (ListPreference)findPreference("BAUDRATE");
			baudrates.setSummary(baudrates.getValue());
			baudrates.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
				public boolean onPreferenceChange(Preference preference, Object newValue) {
					preference.setSummary((String)newValue);

					((application) getApplication()).setBaudrate((String)newValue);

					SharedPreferences sp = getSharedPreferences("android_serialport_api.sample_preferences", MODE_PRIVATE);
					String path = sp.getString("DEVICE", "");
					int baudrate = Integer.decode(sp.getString("BAUDRATE", "-1"));

					Log.e("serialPortPreferences", "path:" + path + ", baudrate:" + baudrate + ", baudrateNewValue:" + newValue);
					SharedPreferences spf = getSharedPreferences("sp", 0);
					spf.edit().putString("BAUDRATE", (String)newValue).commit();

					return true;
				}
			});
		} catch (Exception e) {
			e.printStackTrace();
			Toast.makeText(SerialPortPreferences.this, e.getMessage(), Toast.LENGTH_SHORT).show();
			finish();
		} catch (Error e) {
			e.printStackTrace();
			Toast.makeText(SerialPortPreferences.this, e.getMessage(), Toast.LENGTH_SHORT).show();
			finish();
		}

	}
}
